namespace DefaultNamespace
{
    /**
     *给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。

    请你找出这两个有序数组的中位数，并且要求算法的时间复杂度为 O(log(m + n))。
    
    你可以假设 nums1 和 nums2 不会同时为空。
    
    示例 1:
    
    nums1 = [1, 3]
    nums2 = [2]
    
    则中位数是 2.0
    
    来源：力扣（LeetCode）
    链接：https://leetcode-cn.com/problems/median-of-two-sorted-arrays
    著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     *
     * 
     */
    public class FindMedianSorted
    {
        
        
        /// <summary>
        /// 解法一 将两个数组合并  再寻找中位数
        /// </summary>
        /// <param name="nums1"></param>
        /// <param name="nums2"></param>
        /// <returns></returns>
        public double FindMedianSortedArrays(int[] nums1, int[] nums2) {
            int[] merge = new int[nums1.Length+nums2.Length];

            int[] longList = nums1.Length > nums2.Length ? nums1:nums2;
            
            int[] smallList = nums1.Length > nums2.Length ? nums2:nums1;

            double result = 0d;


            int i = 0;

            int j = 0;

            for (int k = 0; k < merge.Length; k++)
            {

                //将两个数据按照从小到大 排序

                if (j>smallList.Length-1)
                {
                    merge[k] = longList[i];
                    i++;
                }else if (i>longList.Length-1)
                {
                    merge[k] = smallList[j];
                    j++;
                }
                else
                {
                    if (longList[i] >= smallList[j])
                    {
                        merge[k] = smallList[j];
                        j++;
                    }
                    else
                    {
                        merge[k] = longList[i];
                        i++;
                    }
                }

                
            }

            for (int k = 0; k < merge.Length; k++)
            {
                Console.WriteLine("数组数据"+merge[k] );
            }
            if (merge.Length % 2 == 1)
            {
                //奇数

                result = merge[(merge.Length - 1) / 2];
            }
            else
            {
                //偶数
                result = (merge[merge.Length/2] + merge[merge.Length/2-1]) / 2d;
            }

            return result;
        }
    }
}